/**
在 Node.js 中，文件描述符（File Descriptor）是用于表示打开文件的一个整数值。通过文件描述符，程序可以对文件进行读写操作。 fs  模块提供了一些方法来使用文件描述符，
  1. 文件描述符的概念
  文件描述符是一个非负整数，表示一个已打开文件的唯一标识。在 Node.js 中，文件描述符通常在打开文件时生成，并用于后续的读写操作。

  2. 使用文件描述符的主要方法

   2.1 打开文件
  -  fs.open(path, flags, mode, callback) :
    - 参数:
      -  path : 要打开的文件路径。
      -  flags : 文件打开的模式，比如  'r' （读取）、 'w' （写入）、 'a' （追加）等。
      -  mode : 可选参数，设置文件权限（如 0o666），通常在创建新文件时使用。
      -  callback : 回调函数，接受两个参数：错误对象和文件描述符。
    - 示例:
  const fs = require('fs');

    fs.open('example.txt', 'r', (err, fd) => {
        if (err) {
            console.error('打开文件失败:', err);
            return;
        }
        console.log('文件描述符:', fd);
        // 这里可以使用 fd 进行后续操作
    });
   2.2 读取文件
  -  fs.read(fd, buffer, offset, length, position, callback) :
    - 参数:
      -  fd : 文件描述符。
      -  buffer : 用于存储读取数据的 Buffer 对象。
      -  offset : Buffer 中的偏移量。
      -  length : 要读取的字节数。
      -  position : 从文件中读取的起始位置。
      -  callback : 回调函数，接受三个参数：错误对象、字节数和 Buffer 对象。
    - 示例:
  const fs = require('fs');

    const buffer = Buffer.alloc(1024); // 创建一个 1KB 的 Buffer

    fs.open('example.txt', 'r', (err, fd) => {
        if (err) {
            console.error('打开文件失败:', err);
            return;
        }

        fs.read(fd, buffer, 0, buffer.length, 0, (err, bytesRead, buffer) => {
            if (err) {
                console.error('读取文件失败:', err);
                return;
            }
            console.log('读取的字节数:', bytesRead);
            console.log('文件内容:', buffer.toString('utf8', 0, bytesRead));
            fs.close(fd, (err) => {
                if (err) console.error('关闭文件失败:', err);
            });
        });
    });
   2.3 写入文件
  -  fs.write(fd, buffer, offset, length, position, callback) :
    - 参数:
      -  fd : 文件描述符。
      -  buffer : 要写入的 Buffer 对象。
      -  offset : Buffer 中的偏移量。
      -  length : 要写入的字节数。
      -  position : 写入文件的起始位置。
      -  callback : 回调函数，接受三个参数：错误对象、字节数和 Buffer 对象。
    - 示例:
  const fs = require('fs');

    const buffer = Buffer.from('Hello, Node.js!');

    fs.open('example.txt', 'w', (err, fd) => {
        if (err) {
            console.error('打开文件失败:', err);
            return;
        }

        fs.write(fd, buffer, 0, buffer.length, null, (err, bytesWritten, buffer) => {
            if (err) {
                console.error('写入文件失败:', err);
                return;
            }
            console.log('写入的字节数:', bytesWritten);
            fs.close(fd, (err) => {
                if (err) console.error('关闭文件失败:', err);
            });
        });
    });
   2.4 关闭文件
  -  fs.close(fd, callback) :
    - 参数:
      -  fd : 文件描述符。
      -  callback : 回调函数，接受一个参数：错误对象。
    - 示例:
  fs.close(fd, (err) => {
        if (err) console.error('关闭文件失败:', err);
    });
  3. 总结
  文件描述符在 Node.js 中用于表示已打开的文件，允许开发者进行高效的文件读写操作。通过  fs  模块的相关方法，开发者可以打开文件、读取和写入数据以及关闭文件。使用文件描述符的方式适合需要进行多次读写操作的场景，能够提高文件操作的灵活性和效率。
 */
const fs = require("fs");

// 打开一个文件
fs.open("./file/openfile.txt", (err, fd) => {
  if (err) {
    console.log("打开文件失败", err);
    return;
  }

  console.log("文件描述符", fd);

  // 读取文件
  fs.fstat(fd, (err, stats) => {
    if (err) return;
    console.log("文件信息", stats);

    // 关闭文件
    fs.close(fd);
  });
});
